home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / cpp_libs / intrvews / xgrab.lha / xgrab / ui / OGC / allocobj.c < prev    next >
Encoding:
C/C++ Source or Header  |  1990-03-06  |  2.7 KB  |  114 lines

  1. /**
  2.    GRAB Graph Layout and Browser System
  3.  
  4.    Copyright (c) 1989, Tera Computer Company
  5.  **/
  6.  
  7. # include "runtime.h"
  8.  
  9. /* Call allocobj or allocaobj after first saving at least those registers */
  10. /* not preserved by the C compiler. The register used for return values   */
  11. /* is not saved, since it will be clobbered anyway.                       */
  12. asm("    .text");
  13. asm("    .globl  __allocobj");
  14. asm("    .globl  __allocaobj");
  15. asm("    .globl  _allocobj");
  16. asm("    .globl  _allocaobj");
  17.  
  18. # ifdef M68K
  19.     asm("_allocobj:");
  20.     asm("   link    a6,#0");
  21.     asm("    movl    d1,sp@-");
  22.     asm("    movl    a0,sp@-");
  23.     asm("    movl    a1,sp@-");
  24.     asm("    movl    sp@(20),sp@-");
  25.     asm("    jbsr    __allocobj");
  26.     asm("    addl    #4,sp");
  27.     asm("    movl    sp@+,a1");
  28.     asm("    movl    sp@+,a0");
  29.     asm("    movl    sp@+,d1");
  30.     asm("    unlk    a6");
  31.     asm("    rts");
  32.     
  33.     asm("_allocaobj:");
  34.     asm("    link    a6,#0");
  35.     asm("    movl    d1,sp@-");
  36.     asm("    movl    a0,sp@-");
  37.     asm("    movl    a1,sp@-");
  38.     asm("    movl    sp@(20),sp@-");
  39.     asm("    jbsr    __allocaobj");
  40.     asm("    addl    #4,sp");
  41.     asm("    movl    sp@+,a1");
  42.     asm("    movl    sp@+,a0");
  43.     asm("    movl    sp@+,d1");
  44.     asm("    unlk    a6");
  45.     asm("    rts");
  46. # endif
  47.  
  48. # ifdef I386
  49.     asm(".data");
  50.     asm("gc_ret_value: .word 0");
  51.     asm(".word 0");
  52.     asm(".text");
  53.  
  54.     asm("_allocaobj:");
  55.     asm("pushl %ebp");
  56.     asm("movl %esp,%ebp");
  57.     asm("pushal");
  58.     asm("pushl 8(%ebp)");          /* Push orignal argument */
  59.     asm("call __allocaobj");
  60.     asm("popl %ecx");
  61.     asm("movl %eax,gc_ret_value");  /* Save return value */
  62.     asm("popal");
  63.     asm("movl gc_ret_value,%eax");
  64.     asm("leave");
  65.     asm("ret");
  66.  
  67.     asm("_allocobj:");
  68.     asm("pushl %ebp");
  69.     asm("movl %esp,%ebp");
  70.     asm("pushal");
  71.     asm("pushl 8(%ebp)");          /* Push orignal argument */
  72.     asm("call __allocobj");
  73.     asm("popl %ecx");
  74.     asm("movl %eax,gc_ret_value");  /* Save return value */
  75.     asm("popal");
  76.     asm("movl gc_ret_value,%eax");
  77.     asm("leave");
  78.     asm("ret");
  79. # endif
  80.  
  81. # ifdef SPARC
  82.     asm("_allocaobj:");
  83.     asm("    ba    __allocaobj");
  84.     asm("    nop");
  85.     asm("_allocobj:");
  86.     asm("    ba    __allocobj");
  87.     asm("    nop");
  88.     
  89. #   include <sun4/trap.h>
  90.     asm("    .globl    _save_regs_in_stack");
  91.     asm("_save_regs_in_stack:");
  92.     asm("    t    0x3   ! ST_FLUSH_WINDOWS");
  93.     asm("    mov    %sp,%o0");
  94.     asm("    retl");
  95.     asm("    nop");
  96. # endif
  97.  
  98. # ifdef VAX
  99.     asm("_allocobj:");
  100.     asm(".word    0x3e");
  101.     asm("pushl   4(ap)");
  102.     asm("calls   $1,__allocobj");
  103.     asm("ret");
  104.     asm("_allocaobj:");
  105.     asm(".word   0x3e");
  106.     asm("pushl   4(ap)");
  107.     asm("calls   $1,__allocaobj");
  108.     asm("ret");
  109. # endif
  110.  
  111. # if !defined(VAX) && !defined(M68K) && !defined(SPARC) && !defined(I386)
  112.     --> fix it
  113. # endif
  114.